﻿using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;

using System;
using System.Collections.Generic;
using System.Linq;
using Nemerle.Peg;

namespace Nemerle2.Compiler
{
  /// <summary>
  /// Description of IInfo.
  /// </summary>
  public interface IInfo
  {
    CustomAttributes  : ICustomAttributes { get; }
    Type              : FixedType         { get; }
    Location          : Location          { get; } // Оставьте пока пустым. В будущем должно указывать на декомпилированную версию.

    /// <summary>
    /// Уникальный ключ для всех объектов, реализующих данный интерфейс
    /// </summary>
    /// <remarks>
    /// Значения 0 и 1 зарезервированы для внутреннего пользования <br/>
    /// Должны соблюдаться следующие инварианты:
    /// <list type="bullet">
    ///       <item>
    ///             Для двух экземпляров описаний одной и той же сущности (например, информации о методе),
    ///             это свойство должно возвращать одно и то же значение.
    ///       </item>
    ///       <item>
    ///            Значение данного свойства должно отличаться после перезагрузки сборки с метаданными, содержащими данное описание
    ///       </item>
    /// </list>
    /// </remarks>
    UniqueKey         : long              { get; }
  }
}
